assume cs:code
public copy_info,clear_screen,show_str;,divdw;,dtoc


code segment

copy_info:		
    ;初始化偏移地址
	mov	si,0								
	mov	di,0
	;雇员人数的偏移地址
	mov bp,168
	
	mov	cx,21

s:		
    ;年份
	mov	ax,[si]
	mov	es:[di],ax
	mov	ax,[si+2]
	mov	es:[di+2],ax
	
	mov	byte ptr es:[di+4],' '

    ;总收入，方便除法计算
	mov	ax,[si+84]
	mov	es:[di+5],ax
	mov	dx,[si+86]
	mov	es:[di+7],dx
	
	mov	byte ptr es:[di+9],' '
	;人数
	mov	bx,ds:[bp]
	add bp,2
	mov	es:[di+10],bx
	
	mov	byte ptr es:[di+12],' '
	
	mov	bx,es:[di+10]
    ; 除法
	div bx
	mov es:[di+13],ax
	
	mov	byte ptr es:[di+15],' '

	add	si,4
	add	di,16
	loop	s
	
    ret

clear_screen:
    push es            

    mov ax,0b800H
    mov es,ax
	
	mov di,0

show_nothing:
	mov byte ptr es:[di+160],' '
	mov byte ptr es:[di+161],00000000b
	add di,2
	cmp di,160*21
	jne show_nothing

	pop es
	ret	
 
 
;显示字符串，ds指向的数据段为显示的字符串，cl为颜色，dh为行数，dl为列数
show_str:  
    push si            
    push bx            
    push es            

    mov ax,0b800H
    mov es,ax    

    mov ax,0
    mov al,160
    mul dh
    mov bx,ax
    mov ax,0
    mov al,2          
    mul dl
    add bx,ax

	mov si,0
    mov di,0
    mov al,cl
    mov ch,0
show:
	mov cl,ds:[si]
    ;结束
    jcxz ok
    ;将需要显示的内容写入缓冲区
	mov es:[bx+di+0], cl
    mov es:[bx+di+1], al
    ;di：缓冲区数据偏移量
    add di,2								
    ;si：data_sorted数据段数据偏移量
    inc si
    jmp short show

ok: pop es         
    pop bx
    pop si             
    ret

; divdw: 
; 	push bx
;     push ax
;     mov ax,dx
;     mov dx,0
;     ;dx|ax除以cx，ax存储商（高16位），dx存储余数（对于下一次除法，恰好实现余数放在高16位）
;     div cx
;     mov bx,ax

;     pop ax
;     div cx
;     mov bp,dx 
;     mov dx,bx
; 	pop bx
;     ret



; dtoc:    
;     push si
;     mov si, 0  

; change:
; 	mov cx,10
;     call divdw     
	
;     push ax
;     push dx

;     add ax,dx
;     mov cx,ax
;     pop dx
;     pop ax

;     add bp,48
;     push bp
;     inc si
; 	jcxz ending						

;     jmp short change

; ending: 
;     mov cx,si
;     mov si,0

; write:
; 	pop ds:[si]

;     inc si
;     loop write
;     ;在最后一个ASCII码后面写入0，表示字符串结束
;     mov byte ptr ds:[si], 0

;     pop si
;     ret
code ends
end ;start